lexer grammar Analex;

options {
  language = Java;
}

tokens {
   INT;
   CHAR;
   VOID;
   RETURN;
}

@rulecatch {}

@header {
   package pl.grammar;
}

   INT: 'int';
   CHAR: 'char';
   VOID: 'void';
   RETURN: 'return';

fragment LETRA: 'a'..'z'|'A'..'Z';
fragment DIGITO: '0'..'9';

fragment SUBRAYADO: '_';


LOGICO_O: '|';
LOGICO_Y: '&';

MAS: '+';
MENOS: '-';
ASTERISCO: '*';
BARRA: '/';
IGUAL: '=';

DOBLEMAS: MAS MAS;
DOBLEMENOS: MENOS MENOS;

COMA: ',';
PUNTOYCOMA: ';';

PARENTESIS_INI: '(';
PARENTESIS_FIN: ')';
CORCHETE_INI: '[';
CORCHETE_FIN: ']';
LLAVE_INI: '{';
LLAVE_FIN: '}';
PORCENTAJE: '%';

SEPARADOR: PORCENTAJE PORCENTAJE;

CADENA: '"' (~('"'|'\n'))* '"';

ENTERO: (DIGITO)+;
    
RANGO: (LETRA MENOS LETRA|DIGITO MENOS DIGITO)+;

IDENTIFICADOR: (LETRA|SUBRAYADO)(LETRA|DIGITO|SUBRAYADO)*;

Whitespace :
  (' ' | '\t' | '\f')+ {$channel=HIDDEN; skip();};
  
NewLine :
  ('\r' '\n' | '\r' | '\n') {$channel=HIDDEN; skip();};
  
MultiLineComment :
  '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN; skip();};

